// // 在 gamesession 包内创建 serialization.go
package gamesession

// import (
// 	"encoding/json"
// )

// // // SessionData 会话持久化数据结构
// // type SessionData struct {
// // 	ID                 string           `json:"id"`
// // 	State              SessionState     `json:"state"`
// // 	Config             SessionConfig    `json:"config"`
// // 	Players            []string         `json:"players"`
// // 	CreateAt           time.Time        `json:"create_at"`
// // 	StartTime          *time.Time       `json:"start_time,omitempty"`
// // 	PauseTime          *time.Time       `json:"pause_time,omitempty"`
// // 	ResumeTime         *time.Time       `json:"resume_time,omitempty"`
// // 	TotalPauseDuration time.Duration    `json:"total_pause_duration"`
// // 	EndTime            *time.Time       `json:"end_time,omitempty"`
// // }

// // Serialize 将BaseSession序列化为JSON
// func (s *BaseSession) Serialize() ([]byte, error) {
// 	s.mu.RLock()
// 	defer s.mu.RUnlock()
	
// 	players := make([]string, 0, len(s.players))
// 	for playerID := range s.players {
// 		players = append(players, playerID)
// 	}
	
// 	data := SessionData{
// 		ID:                 s.id,
// 		State:              s.state,
// 		Config:             s.config,
// 		Players:            players,
// 		CreateAt:           s.createAt,
// 		TotalPauseDuration: s.totalPauseDuration,
// 	}
	
// 	// 处理指针时间字段
// 	if !s.startTime.IsZero() {
// 		data.StartTime = &s.startTime
// 	}
// 	if !s.pauseTime.IsZero() {
// 		data.PauseTime = &s.pauseTime
// 	}
// 	if !s.resumeTime.IsZero() {
// 		data.ResumeTime = &s.resumeTime
// 	}
// 	if !s.endTime.IsZero() {
// 		data.EndTime = &s.endTime
// 	}
	
// 	return json.Marshal(data)
// }

// // Deserialize 从JSON数据恢复BaseSession
// func (s *BaseSession) Deserialize(data []byte) error {
// 	var sessionData SessionData
// 	if err := json.Unmarshal(data, &sessionData); err != nil {
// 		return err
// 	}
	
// 	s.mu.Lock()
// 	defer s.mu.Unlock()
	
// 	s.id = sessionData.ID
// 	s.state = sessionData.State
// 	s.config = sessionData.Config
// 	s.createAt = sessionData.CreateAt
// 	s.totalPauseDuration = sessionData.TotalPauseDuration
	
// 	// 恢复玩家集合
// 	s.players = make(map[string]bool)
// 	for _, playerID := range sessionData.Players {
// 		s.players[playerID] = true
// 	}
	
// 	// 恢复时间指针字段
// 	if sessionData.StartTime != nil {
// 		s.startTime = *sessionData.StartTime
// 	}
// 	if sessionData.PauseTime != nil {
// 		s.pauseTime = *sessionData.PauseTime
// 	}
// 	if sessionData.ResumeTime != nil {
// 		s.resumeTime = *sessionData.ResumeTime
// 	}
// 	if sessionData.EndTime != nil {
// 		s.endTime = *sessionData.EndTime
// 	}
	
// 	return nil
// }

// // 为GameSession接口添加序列化方法
// type SerializableSession interface {
// 	GameSession
// 	Serialize() ([]byte, error)
// 	Deserialize(data []byte) error
// }